package com.dzl.userwx.service;

import com.dzl.base.service.BaseService;
import com.dzl.card.pojo.vo.WelfareUserCardSecretVo;
import com.dzl.userwx.pojo.WelfareUserWx;
import com.dzl.userwx.pojo.dto.UserWxIntegralDto;
import com.dzl.userwx.pojo.query.WelfareUserWxIdQuery;
import com.dzl.userwx.pojo.query.WelfareUserWxIntegralQuery;
import com.dzl.userwx.pojo.query.WelfareUserWxQuery;
import com.dzl.userwx.pojo.vo.UserWxIntegraDetaillVo;
import com.dzl.userwx.pojo.vo.WelfareUserCommonVo;
import com.dzl.userwx.pojo.vo.WelfareUserOrganizationVo;
import com.dzl.userwx.pojo.vo.WelfareUserWxVo;
import com.github.pagehelper.PageInfo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 小程序用户表(WelfareUserWx)表服务接口
 * @author ChenLong
 * @since 2021-05-14 11:06:52
 */
public interface WelfareUserWxService extends BaseService<WelfareUserWx> {

    /**
     * 登录校验（校验是否登录，是否绑卡，是否设置支付密码）
     * @param openId openId
     * @return com.dzl.util.JsonResult
     * @author ChenLong
     * @since 2021-05-17 09:35:11
     **/
    Map<String, Object> wxVerify(String openId);

    /**
     * 通过openId获取用户信息
     * @author ChenLong
     * @since 2021-05-17 17:18:34
     * @param openId openId
     * @return com.dzl.util.JsonResult<java.lang.Object>
     **/
    WelfareUserWx getWxUserInfo(String openId);

    /**
     * 通过openId获取用户信息是否绑定某个企业(进入过企业主页)
     * @author liuguanjun
     * @since 2021-09-07 14:27:34
     * @param openId openId
     **/
    Integer getWxUserInfoEnterpriseId(String openId);

    /**
     * saas小程序端通过手机号登录
     * @param enterpriseId 企业id
     * @param openid 微信openid
     * @param phone 手机号
     * @param password 密码
     * @author liuguanjun
     * @since 2021-09-07 11:44:34
     **/
    String login(Integer enterpriseId, String openid, String phone, String password);

    /**
     * 获取用户综合信息（订单数量、卡密数量）
     * @author ChenLong
     * @date 2021-06-07 12:39:25
     * @param userId 用户ID
     * @return com.dzl.userwx.pojo.vo.WelfareUserCommonVo
     **/
    WelfareUserCommonVo getWxUserCommonInfo(Integer userId);

    /**
     * 设置支付密码
     * @author ChenLong
     * @since 2021-05-19 18:11:36
     * @param userId userId
     * @param ppwd ppwd
     * @return com.dzl.util.JsonResult<java.lang.Object>
     **/
    Integer addPayPassword(Integer userId, String ppwd);

    /**
     * 修改支付密码
     * @author ChenLong
     * @since 2021-05-19 17:58:58
     * @param userId userId
     * @param ppwd ppwd
     * @return com.dzl.util.JsonResult<java.lang.Object>
     **/
    Integer updatePayPassword(Integer userId,String ppwd);

    /**
     * 修改电话号码
     * @author ChenLong
     * @since 2021-05-20 10:36:43
     * @param userId userId
     * @param phoneNumber phoneNumber
     * @return int
     **/
    Integer updatePhoneNumber(Integer userId,String phoneNumber);

    /**
     * 服务端用户管理列表分页数据
     * @date 2021/5/18 11:03
     * @author caobucao
     * @param query 查询条件
     * @return java.util.List<com.dzl.userwx.entity.vo.WelfareUserWxVo>
     */
    PageInfo<WelfareUserWxVo> selectUserWxListPage(WelfareUserWxQuery query);

    /**
     * 服务端用户详情
     * @date 2021/5/18 11:31
     * @author caobucao
     * @param id 用户id
     * @return com.dzl.userwx.entity.vo.WelfareUserWxVo
     */
    Map<String, Object> getWxUserInfoByIdAll(Integer id);

    /**
     * 服务端用户详情-用户基本信息
     * @date 2021/5/20 10:29
     * @author caobucao
     * @param id 用户id
     * @return com.dzl.userwx.entity.vo.WelfareUserWxVo
     */
    WelfareUserWxVo getWxUserInfoById(Integer id);

    /**
     * 服务端用户详情-用户卡信息
     * @date 2021/5/20 10:32
     * @author caobucao
     * @param id 用户id
     * @return java.util.List<com.dzl.cardsecret.entity.vo.WelfareUserCardSecretVo>
     */
    List<WelfareUserCardSecretVo> getUserWxCardInfoById(Integer id);

    /**
     * 服务端用户详情-用户未过期的卡列表
     * @date 2021/5/20 10:32
     * @author caobucao
     * @param userId 用户id
     * @return java.util.List<com.dzl.cardsecret.entity.vo.WelfareUserCardSecretVo>
     */
    List<WelfareUserCardSecretVo> getUserWxCardInfoListNoExpiredById(Integer userId, Integer cardSecretId,
                                                                     Integer notIncludedCardSecretId);

    /**
     * 更新用户积分数据
     * @date 2021/9/8 10:55
     * @author caobucao
     * @param userIdList 用户idList
     * @param integral 分发的积分数量
     * @return java.lang.Integer
     */
    Integer updateUserIntegral(List<Integer> userIdList, BigDecimal integral);

    /**
     * 分页查询成员积分管理数据
     * @date 2021/9/8 10:54
     * @author caobucao
     * @param query 查询条件
     * @return java.util.List<com.dzl.userwx.pojo.vo.WelfareUserWxIntegralVo>
     */
    List<WelfareUserOrganizationVo> getUserWxIntegralPage(WelfareUserWxIntegralQuery query);

    /**
     * 精确查询成员积分管理数据
     * @date 2021/9/8 10:54
     * @author caobucao
     * @param query 查询条件
     * @return java.util.List<com.dzl.userwx.pojo.vo.WelfareUserWxIntegralVo>
     */
    List<WelfareUserOrganizationVo> getOrganizationUser(WelfareUserWxIntegralQuery query);

    /**
     * 获取用户积分使用明细
     * @author ChenLong
     * @date 2021-09-10 11:24:21
     * @param query 用户ID等参数
     * @return java.util.List<com.dzl.userwx.pojo.vo.UserWxIntegraDetaillVo>
     **/
    List<UserWxIntegraDetaillVo> getUserIntegralDetail(WelfareUserWxIdQuery query);

    /**
     * 积分过期时扣除用户剩余积分
     * @date 2021/9/9 17:35
     * @author caobucao
     * @param dto 传输数据
     * @return void
     */
    Integer updateIntegralForExpired(UserWxIntegralDto dto);

}
